package com.octopus.core.utils;

import com.google.gson.Gson;
import lombok.NonNull;

/**
 * JSON工具类
 *
 * @author yang_shoulai@hoperun.com
 * @date 2019/08/05
 */
public class JsonUtils {

  private static final Gson GSON = new Gson();

  /**
   * 对象转换为JSON字符串
   *
   * @param obj 对象
   * @param gson GSON
   * @return JSON字符串
   */
  public static String toJson(Object obj, @NonNull Gson gson) {
    return obj == null ? null : gson.toJson(obj);
  }

  /**
   * 对象转换为JSON字符串
   *
   * @param obj 对象
   * @return JSON字符串
   */
  public static String toJson(Object obj) {
    return obj == null ? null : GSON.toJson(obj);
  }

  /**
   * 将JSON字符串转换为Java对象
   *
   * @param json JSON字符串
   * @param cls 类型
   * @param gson GSON
   * @param <T> 类型
   * @return 目标Java对象
   */
  public static <T> T fromJson(@NonNull String json, @NonNull Class<T> cls, @NonNull Gson gson) {
    return gson.fromJson(json, cls);
  }

  /**
   * 将JSON字符串转换为Java对象
   *
   * @param json JSON字符串
   * @param cls 类型
   * @param <T> 类型
   * @return 目标Java对象
   */
  public static <T> T fromJson(@NonNull String json, @NonNull Class<T> cls) {
    return GSON.fromJson(json, cls);
  }
}
